package com.hspedu.set_;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @Author Stringzhua
 * @Date 2024/3/12 16:57
 * description:
 */
@SuppressWarnings("all")
public class LinkedHashSet_ {
    public static void main(String[] args) {
        //分析LinkedHashSet底层机制
        Set set = new LinkedHashSet();
        set.add(new String("AA"));
        set.add(456);
        set.add(456);//不能添加重复元素
        set.add(new Customer("刘",1001));
        set.add(123);
        set.add("HSP");

        System.out.println("set = " + set);
        /*
        * 1.LinkedHashSet 加入顺序和取出元素/数据的顺序一致
        * 2.LinkedHashSet 底层维护的是一个LinkedHashMap(是HashMap的子类)
        * 3.LinkedHashSet 底层结构(数组+双向链表)
        * 4.添加第一次时,直接将数组table 扩容到16个,存放的结点类型是LinkedHashMap$Entry
        * 5.数组是HashMap$Node[] 存放的元素/数据是 LinkedHashMap$Entry类型
        * //继承关系是在内部类完成[HashMap.Node<K,V>是静态内部类]
        * static class Entry<K,V> extends HashMap.Node<K,V> {
                Entry<K,V> before, after;
                Entry(int hash, K key, V value, Node<K,V> next) {
                    super(hash, key, value, next);
                }
            }
         * 6.
         *
         * */
    }
}
@SuppressWarnings("all")
class Customer{
    private String name;
    private int no;

    public Customer(String name, int no) {
        this.name = name;
        this.no = no;
    }
}